package com.zy.kotlinbaselibrary.base.mvp

import java.lang.ref.Reference


abstract class BasePresenter<V : BaseView, M : BaseModel> : IPresenter<V> {


    /**
     * 由于Presenter 经常性的持有Activity 的强引用，如果在一些请求结束之前Activity 被销毁了，Activity对象将无法被回收，此时就会发生内存泄露。
     * 这里我们使用虚引用和泛型来对MVP中的内存泄漏问题进行改良。
     */
    protected var v: Reference<V>? = null

    val mModel: M by lazy {
        createModel()
    }

    abstract fun createModel(): M

    var mView: V? = null
        private set


    override fun attachView(view: V) {
        mView = view
    }

    override fun detachView() {
        mView?.let {
            mView = null
        }

    }

}